﻿using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Web;
using System.Web.Mvc;
using Telecom.Service;
using TelecomGis.Helper.Control;

namespace TelecomGis.Controllers
{
    public class QuanHuyenController : ContronllerBase
    {
        //
        // GET: /QuanHuyen/
        private readonly quanhuyenPhuongXaSer _quanhuyenPhuongXaSer = new quanhuyenPhuongXaSer();

        public ActionResult QuanHuyen()
        {
            return PartialView("_QuanHuyen");
        }

        public string getQHFirstByTo(string ma)
        {
            var _listEntity = _quanhuyenPhuongXaSer.getQHFirstByTo(ma, UtContextgis._UserPageContext.PhuongxaByUser);

            return JsonConvert.SerializeObject(_listEntity, Formatting.Indented,
                              new JsonSerializerSettings
                              {
                                  ReferenceLoopHandling = ReferenceLoopHandling.Ignore
                              });
        }

        public string getList_PX_First_By_Quan_Huyen(string quanhuyenId, string toq)
        {
            var _listEntity = _quanhuyenPhuongXaSer.getList_PX_First_By_Quan_Huyen(quanhuyenId,toq, UtContextgis._UserPageContext.PhuongxaByUser);

            return JsonConvert.SerializeObject(_listEntity, Formatting.Indented,
                              new JsonSerializerSettings
                              {
                                  ReferenceLoopHandling = ReferenceLoopHandling.Ignore
                              });
        }




        public ActionResult ListQuanHuyen()
        {
            var _listEntity = _quanhuyenPhuongXaSer.getList_QH_All();
            return Json(new { Result = "OK", Records = _listEntity, TotalRecordCount = _listEntity.Count() }, JsonRequestBehavior.AllowGet);
        }

        public ActionResult AddQuanHuyen()
        {
            Telecom.Data.QUAN_HUYEN model = new Telecom.Data.QUAN_HUYEN();
            model.MA_TINH = "CTO";
            return PartialView("_AddQuanHuyen", model);
        }

        public ActionResult UpdateQuanHuyen(string maQH)
        {
            Telecom.Data.QUAN_HUYEN model = _quanhuyenPhuongXaSer.GetQuanHuyenById(maQH);
            return PartialView("_UpdateQuanHuyen", model);
        }

        [HttpPost]
        [ValidateInput(false)]
        public ActionResult AddQuanHuyen(Telecom.Data.QUAN_HUYEN model)
        {
            if (string.IsNullOrEmpty(model.MA_QUAN))
            {
                return JsonError("Vui lòng nhập mã quận");
            }

            if (model.MA_QUAN.Length > 2)
            {
                return JsonError("Vui lòng nhập mã quận huyện chỉ được 2 ký tự");
            }

            var entity = _quanhuyenPhuongXaSer.GetQuanHuyenById(model.MA_QUAN);
            if (entity != null && !string.IsNullOrEmpty(entity.MA_QUAN))
            {
                return JsonError("Mã quận này đã tồn tại trên hệ thống. vui lòng xem lại");
            }

            if (string.IsNullOrEmpty(model.TEN_QUAN))
            {
                return JsonError("Vui lòng tên quận huyện");
            }

            model.MA_QUAN = model.MA_QUAN.ToUpper();
            _quanhuyenPhuongXaSer.AdQuanHuyen(model);

            return JsonSuccess("");
        }

        [HttpPost]
        [ValidateInput(false)]
        public ActionResult UpdateQuanHuyen(Telecom.Data.QUAN_HUYEN model)
        {
            if (string.IsNullOrEmpty(model.MA_QUAN))
            {
                return JsonError("Vui lòng nhập mã quận");
            }

            if (model.MA_QUAN.Length > 2)
            {
                return JsonError("Vui lòng nhập mã quận huyện chỉ được 2 ký tự");
            }

            var StringMaQuanOld = Request["MaQuanHuyenOld"];

            if (StringMaQuanOld != model.MA_QUAN)
            {
                var entity = _quanhuyenPhuongXaSer.GetQuanHuyenById(model.MA_QUAN);
                if (entity != null && !string.IsNullOrEmpty(entity.MA_QUAN))
                {
                    return JsonError("Mã quận bạn thay đổi đã tồn tại trên hệ thống. vui lòng xem lại");
                }
            }


            if (string.IsNullOrEmpty(model.TEN_QUAN))
            {
                return JsonError("Vui lòng tên mã quận huyện");
            }

            model.MA_QUAN = model.MA_QUAN.ToUpper();

            _quanhuyenPhuongXaSer.UpdateQuanHuyen(model);

            return JsonSuccess("");
        }

        
        [HttpPost]
        public JsonResult DeleteQuanHuyen(string MA_QUAN)
        {
            try
            {
                Thread.Sleep(50);
                _quanhuyenPhuongXaSer.DeteleQuanHUyen(MA_QUAN);
                return Json(new { Result = "OK" });
            }
            catch (Exception ex)
            {
                return Json(new { Result = "ERROR", Message = ex.Message });
            }
        }


        public ActionResult ListPhuongXa(string qhId)
        {
            var _listEntity = _quanhuyenPhuongXaSer.getList_PX_By_Quan_All(qhId);
            return Json(new { Result = "OK", Records = _listEntity, TotalRecordCount = _listEntity.Count() }, JsonRequestBehavior.AllowGet);
        }

        public ActionResult AddPhuongXa(string maquan, string namequan)
        {
            Telecom.Data.PHUONG_XA model = new Telecom.Data.PHUONG_XA();
            model.MA_QUAN = maquan;
            ViewBag.NamquanHuyen = namequan;
            return PartialView("_AddPhuongXa", model);
        }

        public ActionResult UpdatPhuongXa(string maPx, string NameQH)
        {
            Telecom.Data.PHUONG_XA model = _quanhuyenPhuongXaSer.GetPhuongXaById(maPx);
            ViewBag.NamquanHuyen = NameQH;
            return PartialView("_UpdatPhuongXa", model);
        }

        [HttpPost]
        [ValidateInput(false)]
        public ActionResult AddPhuongXa(Telecom.Data.PHUONG_XA model)
        {
            if (string.IsNullOrEmpty(model.MA_PHUONG))
            {
                return JsonError("Vui lòng nhập mã phường xã");
            }

            var entity = _quanhuyenPhuongXaSer.GetPhuongXaById(model.MA_PHUONG);
            if (entity != null && !string.IsNullOrEmpty(entity.MA_PHUONG))
            {
                return JsonError("Mã phường xã này đã tồn tại trên hệ thống. vui lòng xem lại");
            }

            if (string.IsNullOrEmpty(model.TEN_PHUONG))
            {
                return JsonError("Vui lòng tên phường xã");
            }

            model.MA_PHUONG = model.MA_PHUONG.ToUpper();
            _quanhuyenPhuongXaSer.AdPhuongXa(model);

            return JsonSuccess("");
        }

        [HttpPost]
        [ValidateInput(false)]
        public ActionResult UpdatePhuongXa(Telecom.Data.PHUONG_XA model)
        {
            if (string.IsNullOrEmpty(model.MA_PHUONG))
            {
                return JsonError("Vui lòng nhập mã phường xã");
            }

            var StringMaPXOld = Request["MaPhuongXaOld"];

            if (StringMaPXOld != model.MA_PHUONG)
            {
                var entity = _quanhuyenPhuongXaSer.GetPhuongXaById(model.MA_PHUONG);
                if (entity != null && !string.IsNullOrEmpty(entity.MA_PHUONG))
                {
                    return JsonError("Mã phường xã bạn thay đổi đã tồn tại trên hệ thống. vui lòng xem lại");
                }
            }

            if (string.IsNullOrEmpty(model.TEN_PHUONG))
            {
                return JsonError("Vui lòng tên phường xã");
            }



            model.MA_PHUONG = model.MA_PHUONG.ToUpper();

            _quanhuyenPhuongXaSer.UpdatePhuongXa(model);

            return JsonSuccess("");
        }


        [HttpPost]
        public JsonResult DeletePhuongXa(string MA_PHUONG)
        {
            try
            {
                Thread.Sleep(50);
                _quanhuyenPhuongXaSer.DeletePhuongXa(MA_PHUONG);
                return Json(new { Result = "OK" });
            }
            catch (Exception ex)
            {
                return Json(new { Result = "ERROR", Message = ex.Message });
            }
        }

    }
}
